AWS Lambda コンソールで CreateAlias アクションを許可してもエイリアスが作成できないときの対処方法
AWS マネジメントコンソールの表示情報はアップデートで変更されることがあります。この記事は 2020/01 時点の内容です。
困っていた内容
AWS Lambda のコンソールで関数のエイリアスを作成したいです。 lambda:CreateAlias
のアクションを許可したにもかかわらず、「エイリアスを作成」ボタンが押せません。どうすれば関数のエイリアスが作成できるようになりますか?
この事象は以下の利用状況で発生しました。
- 要件で一部の操作を制限した IAM ポリシーを IAM ロールへアタッチしている
- IAM ロールのスイッチロールを利用して、Lambda コンソールへアクセスしている
Lambda コンソールでエイリアスを作成できないポリシー例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:GetFunctionConfiguration", "lambda:ListFunctions", "lambda:GetFunction", "lambda:UpdateFunctionCode", "lambda:GetAlias", "lambda:CreateAlias", "lambda:ListAliases", "lambda:UpdateAlias", "lambda:InvokeFunction", "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration", // EC2 や IAM に関するポリシー ], "Resource": "*" } ] }
どう対応すればいいの?
Lambda コンソール上で関数のエイリアスを作成するには、ListVersionsByFunction
アクションの許可が必要です。IAM コンソールのビジュアルエディタ、または JSON の編集で対象の IAM ポリシーに ListVersionsByFunction
を追加することで、操作が可能となります。
JSON を直接編集する例も記載します。
Lambda コンソールでエイリアスを作成できるポリシー例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:GetFunctionConfiguration", "lambda:ListFunctions", "lambda:GetFunction", "lambda:UpdateFunctionCode", "lambda:GetAlias", "lambda:CreateAlias", "lambda:ListAliases", "lambda:UpdateAlias", "lambda:InvokeFunction", "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration", "lambda:ListVersionsByFunction", // EC2 や IAM に関するポリシー ], "Resource": "*" } ] }
ListVersionsByFunction
アクションを許可後、「エイリアスを作成」ボタンが押せるようになります。
どうやって調べたの?
検証環境で上述の利用状況と同様の IAM ポリシー、ポリシーをアタッチしたロールを作成し、AWS CLI で事象が再現するか調べました。
$ aws lambda create-alias \ --function-name arakawaTestAlias \ --description "alias for version 1 of function" \ --function-version 1 \ --name test \ --profile test { "AliasArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:arakawaTestAlias:test", "Name": "test", "FunctionVersion": "1", "Description": "alias for version 1 of function", "RevisionId": "xxx" }
AWS CLI では ListVersionsByFunction
のアクションを許可しなくてもエイリアスの作成に成功しました。コマンド create-alias
を実行するには --function-version
が必須オプションであることがわかりました。当初のポリシーを確認すると、関数バージョンの参照権限が見つかりませんでした。
以上のことから Lambda コンソールで関数バージョンを参照するための権限が必要と推測し、ListVersionsByFunction
のアクションを許可したところ、事象の解消が確認できました。
まとめ
AWS マネジメントコンソールではコマンドで実行可能なポリシーがアタッチされていても、一覧表示などの画面に関する ListXX アクションの許可も必要です。同様の状況に遭遇した場合は、画面表示に該当しそうな ListXX アクションが存在するか調べる方法が効果的です。(GetXX や DescribeXX などもありますが、ListXX アクションはとくに忘れがちです。)
また、AWS CLI のリファレンスで必須オプションとなっているパラメータなどから必要な権限を推測することも効果的です。